home *** CD-ROM | disk | FTP | other *** search
- /*
- * MultiMAIL offline mail reader
- *
-
- Written by Kolossvary Tamas (thomas@vma.bme.hu)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
- #include "interface.h"
-
- extern mmail mm;
- extern packet_list *packetList;
- extern letter_list *letterList;
- extern AreaListWindow areas;
- extern LetterListWindow letters;
- extern LetterWindow letterwindow;
- extern HelpWindow helpwindow;
- extern Interface interface;
- extern AddressBook addresses;
- extern int getstring(WINDOW *, int, int, char *, int, int, int);
-
- //************** LittleAreaListWindow *****************
-
- LittleAreaListWindow :: LittleAreaListWindow (char param_key)
- {
- int i;
-
- key=param_key;
- list=newwin(LINES-6, 25, 2, 30);
- list_max_y = LINES-9;
- init_pair(15, COLOR_WHITE, COLOR_BLUE);
- wattrset(list, COLOR_PAIR(15) | A_BOLD);
- for(i=0; i < (LINES-6)*25; i++)
- waddch(list, ' ');
- wborder(list, 0, 0, 0, 0, 0, 0, 0, 0);
- areas.Reset_areaList();
- while(active != mm.areaList->getAreaNo() - 2)
- Move(DOWN);
- mvwaddstr(list, 1, 2, "Reply goes to area:");
- Draw();
- }
-
- LittleAreaListWindow :: ~LittleAreaListWindow (void)
- {
- mm.areaList->gotoArea(active+2);
- letterwindow.set_Letter_Params(active + 2, key);
- delwin(list);
- letterwindow.ReDraw();
- }
-
- void LittleAreaListWindow :: Draw (void)
- {
- int i;
- init_pair(16, COLOR_YELLOW, COLOR_BLUE);
- mm.areaList->gotoArea(position+2);
- i=1;
- while(i < list_max_y)
- {
- wattrset(list, COLOR_PAIR(16) | A_BOLD);
- if(position+i-1 == active)
- wattron(list, A_REVERSE);
- mvwprintw(list, i+2, 2, "%-21s", mm.areaList->getName());
- if(position+i == NumOfItems())
- i=list_max_y;
- i++;
- mm.areaList->gotoArea(mm.areaList->getAreaNo() + 1);
- }
- wnoutrefresh(list);
- }
-
- int LittleAreaListWindow :: NumOfItems (void)
- {
- return mm.areaList->noOfAreas() - 1; //-1 is the reply area
- }
-
- //************* AreaListWindow ******************
-
- void AreaListWindow :: ReDraw(void)
- {
- touchwin(list);
- wnoutrefresh(list);
- touchwin(info);
- wnoutrefresh(info);
- }
-
- void AreaListWindow :: FirstUnread(void)
- {
- int i;
-
- position = 0;
- active = 0;
- list_max_y = LINES-14;
- for(i=0; i<NumOfItems(); i++)
- {
- mm.areaList->gotoArea(i+1);
- if(!mm.areaList->getNoOfUnread())
- {
- Move(DOWN);
- Draw();
- doupdate();
- }
- else
- i=NumOfItems();
- }
- }
-
- void AreaListWindow :: Reset_areaList(void)
- {
- mm.areaList->gotoArea(active + 1);
- }
-
- int AreaListWindow :: NumOfItems(void)
- {
- return mm.areaList->noOfAreas();
- }
-
- void AreaListWindow :: Draw(void)
- {
- int i;
- char tmp[21];
-
- init_pair(bw, COLOR_CYAN, COLOR_BLACK);
- init_pair(qwk, COLOR_GREEN, COLOR_BLACK);
- init_pair(usenet, COLOR_WHITE, COLOR_BLACK);
- init_pair(mail, COLOR_RED, COLOR_BLACK);
- init_pair(bwrep, COLOR_YELLOW, COLOR_BLACK);
- init_pair(15, COLOR_YELLOW, COLOR_BLACK);
- init_pair(16, COLOR_WHITE, COLOR_BLACK);
- for(i=1; i<list_max_y; i++)
- {
- mm.areaList->gotoArea(position+i);
- wattrset(list, COLOR_PAIR(mm.areaList->getType()) | A_NORMAL);
- if (mm.areaList->getNoOfUnread() > 0) wattron(list, A_BOLD);
- // ^^^ide majd a getNoOfUnread() kell
- if (position+i-1 == active) wattron(list, A_REVERSE);
-
- mvwprintw(list, i+1, 1, " %-6s ", mm.areaList->getShortName());
- mvwprintw(list, i+1, 9, " %-21s", mm.areaList->getName());
- if (mm.areaList->getNoOfLetters())
- wprintw(list, " %5d", mm.areaList->getNoOfLetters());
- else wprintw(list, " .");
- if (mm.areaList->getNoOfUnread())
- wprintw(list, " %5d", mm.areaList->getNoOfUnread());
- else wprintw(list, " .");
- if (mm.areaList->getNoOfPersonal())
- wprintw(list, " %5d ", mm.areaList->getNoOfPersonal());
- else wprintw(list, " . ");
-
- if((position+i) == NumOfItems()) i=list_max_y;
- }
- wnoutrefresh(list);
-
- mm.areaList->gotoArea(active+1);
- wattrset(info, COLOR_PAIR(15) | A_BOLD);
- switch(mm.areaList->getType())
- {
- case bw: mvwaddstr(info, 1, 2, " BBS: Sysop: ");
- mvwaddstr(info, 2, 2, "Type: Packet: ");
- mvwaddstr(info, 3, 2, "Area description: ");
- wattrset(info, COLOR_PAIR(16) | A_BOLD);
- strncpy(tmp, mm.areaList->getProviderName(), 20);
- tmp[20] = '\0';
- mvwaddstr(info, 1, 8, tmp);
- mvwprintw(info, 1, 38, "%-20s", mm.areaList->getOperatorName());
- mvwprintw(info, 2, 8, "Bluewave");
- mvwprintw(info, 2, 38, "%12s", packetList->getName());
- mvwprintw(info, 3, 20, "%-50s", mm.areaList->getDescription());
- break;
- case qwk: break;
- case mail: break;
- case usenet: break;
- case bwrep: mvwaddstr(info, 1, 2, " BBS: Sysop: ");
- mvwaddstr(info, 2, 2, "Type: File: ");
- mvwaddstr(info, 3, 2, "Area description: ");
- wattrset(info, COLOR_PAIR(16) | A_BOLD);
- strncpy(tmp, mm.areaList->getProviderName(), 20);
- tmp[20] = '\0';
- mvwaddstr(info, 1, 8, tmp);
- mvwprintw(info, 1, 38, "%-20s", mm.areaList->getOperatorName());
- mvwprintw(info, 2, 8, "Bluewave NEW");
- mvwprintw(info, 2, 38, "%12s", packetList->getName());
- mvwprintw(info, 3, 20, "%-50s", mm.areaList->getDescription());
- break;
- }
- touchwin(info);
- wnoutrefresh(info);
- }
-
- void AreaListWindow :: MakeActive (void)
- {
- int i;
-
- init_pair(11, COLOR_GREEN, COLOR_BLACK);
- init_pair(12, COLOR_YELLOW, COLOR_BLACK);
- init_pair(13, COLOR_MAGENTA, COLOR_BLACK);
- list=newwin(LINES-12, COLS-4, 2, 2);
- list_max_y = LINES-14;
- wattron(list, COLOR_PAIR(11) | A_BOLD);
- for (i=0; i<(COLS-6)*(LINES-12); i++)
- waddch(list, ' ');
- wattrset(list, COLOR_PAIR(12) | A_BOLD);
- wborder(list, 0, 0, 0, 0, 0, 0, 0, 0);
- mvwaddch(list, 0, 2, ACS_RTEE);
- wattrset(list, COLOR_PAIR(11) | A_BOLD);
- wprintw(list, "Message Areas (%d)", mm.areaList->noOfAreas());
- wattrset(list, COLOR_PAIR(12) | A_BOLD);
- waddch(list, ACS_LTEE);
-
- wattrset(list, COLOR_PAIR(13));
- mvwaddstr(list, 1, 2, "Area# Area Total Unread \
- Personal");
-
- info=newwin(5, COLS-4, LINES-11, 2);
- wattron(info, COLOR_PAIR(11) | A_BOLD);
- for (i=0; i<5*(COLS-4); i++)
- waddch(info, ' ');
- wattrset(info, COLOR_PAIR(12) | A_BOLD);
- wborder(info, 0, 0, 0, 0, ACS_LTEE, ACS_RTEE, 0, 0);
- wmove(info, 0, 2);
- waddch(info, ACS_RTEE);
- wattrset(info, COLOR_PAIR(11) | A_BOLD);
- waddstr(info, "Info On The Specified Area");
- wattrset(info, COLOR_PAIR(12) | A_BOLD);
- waddch(info, ACS_LTEE);
-
- Draw();
- helpwindow.arealist();
- }
-
- void AreaListWindow :: Delete (void)
- {
- letterList = mm.areaList->getLetterList();
- delwin(list);
- delwin(info);
- helpwindow.Delete();
- touchwin(screen);
- wnoutrefresh(screen);
- }
-